
        <html>
			<head>
			     <title>【.NET小科普之一】数据库信息在哪儿 - wefgod</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/975">http://drops.wooyun.org/tips/975</a></h1>
				
      <p>
        <h2>0x00 前言</h2>

<hr />

<p>最近有人问到ASP.NET里面的数据库连接信息一般去哪里找。</p>

<p>这里我简单总结一下我遇到过的一些情况，和大家分享一些简单的方法去找ASP.NET的数据库连接信息或数据库文件。</p>

<!--more-->

<h2>0x01 寻找方式</h2>

<hr />

<p>先说一般的数据库连接信息。</p>

<h3>第一种</h3>

<p>一般在web.config，如某套OA就是将连接字符串存放在该文件内，如下图：</p>

<p><img src="http://static.wooyun.org/201402/2014022700095197526.png" alt="2014022700095197526.png" /></p>

<h3>第二种</h3>

<p>有的ASP.NET程序功能较多，会自定义其它config文件，所以可能会存在多个config，而数据库连接信息就存放在其它config文件中，比如逐浪CMS（你们懂的）就有多个config文件，如下图:</p>

<p><img src="http://static.wooyun.org/201402/2014022700101785287.png" alt="2014022700101785287.png" /></p>

<p>但数据库相关连接信息存放在ConfigConnectionStrings.config里：</p>

<p><img src="http://static.wooyun.org/201402/2014022700104882825.png" alt="2014022700104882825.png" /></p>

<h3>第三种</h3>

<p>也有更标新立异的压根不存放在config中，比如信游（你们也懂的）的免费版，也有一个config文件夹，里面的文件大致如下：</p>

<p><img src="http://static.wooyun.org/201402/2014022700111290986.png" alt="2014022700111290986.png" /></p>

<p>数据库连接信息存放在server.apb中：</p>

<p><img src="http://static.wooyun.org/201402/2014022700113714515.png" alt="2014022700113714515.png" /></p>

<h3>第四种</h3>

<p>有一些比较奇葩的，直接写在代码中。这种情况下如果没有源码cs文件，就只能反编译bin目录下的dll文件了，必须扩展开来说，这是后话了。</p>

<p>数据库文件</p>

<p>那如果是access或者SQLite的情况又会有什么变化呢？他们的数据库会存放在什么位置？</p>

<p>现在大多CMS为了避免直接下载MDB或相关格式的问题，在.NET中采取了其它手段去防下载，比如50cms将SQLite的数据库存放在根目录的App_Data文件夹中：</p>

<p><img src="http://static.wooyun.org/201402/2014022700121131087.png" alt="2014022700121131087.png" /></p>

<p>2013就是50cms的数据库：</p>

<p><img src="http://static.wooyun.org/201402/2014022700125250234.png" alt="2014022700125250234.png" /></p>

<p>另外还有直接将access数据库存放在App&#95;Code文件夹中的，保存为.cs后缀，由于App&#95;Code和App_Data是无法直接通过post和get来直接访问的（你有任意文件下载的话谁都拦不住你），所以在一定程度上保证了网站的安全性，比如下面的2013.cs实际就是网站的数据库：</p>

<p><img src="http://static.wooyun.org/201402/2014022700131235957.png" alt="2014022700131235957.png" /></p>

<p>当然了，上面说的也是较为常见的，凡事总会有奇葩的，结合实际情况以不变应万变吧！</p>

<p>总结一下，数据库或者数据库相关信息会在哪里：</p>

<pre><code>1. web.config 
2. 其它config文件 
3. 某些有特征的文件夹下的某个文件（如上面信游的那个） 
4. 源码中，去dll翻翻吧 
5. App_Code或App_Data 
6. 其它各种奇葩情况…… 
</code></pre>

<p>下面重点说说第四种寻找方式。</p>

<h2>0x02 反编译.NET程序</h2>

<hr />

<h3>1 .NET的程序是怎样的？</h3>

<p>我们这说的.NET不是什么www.caoliu.net，都指的是微软的开发语言。下文对.NET的分析主要是我个人的总结，并非官方语言。</p>

<p>那常见的.NET程序其简单构成是咋样的呢？</p>

<p>第一种，我们常见的桌面应用，可以是winform和console类型，比如常见的winform应用其可编译的项目源文件结构大概如下（以VS2008为例）：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406025941289.png" alt="enter image description here" /></p>

<p>Bin目录是编译后的两种类型的可执行文件：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406030097477.png" alt="enter image description here" /></p>

<p>Debug编译后的程序会带有一些相关的调试信息，体积会大一点，release是发布版本的相对没带有那么多调试信息，体积会小一些。</p>

<p>第二种，就是我们要重点熟知的asp.net应用程序，一个很简单的asp.net应用程序的源码目录结构如下：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406260983394.png" alt="enter image description here" /></p>

<p>一般来说，我们的关注点更多不在aspx文件中，因为VS2005之后都主要是将相关的代码分离到了cs文件中。所以我们更多要关注的是.cs后缀的文件，但是在发布版的网站中，是不包含cs文件的，此时我们要关注的就是bin目录了，bin目录中有相关的dll。比如上面的小网站的bin目录只有一个dll文件：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406030040078.png" alt="enter image description here" /></p>

<h3>2. 用什么反编译.NET的程序</h3>

<p>目前相对比较有名的.NET反编译程序主要有两款：</p>

<pre><code>Reflector
ILSpy
</code></pre>

<p>Reflector是一个比较早出现而且功能也比较强大的反编译软件（在这略微提醒一下，是反编译不是反汇编），支持自定义插件和代码调试的功能，支持将源码反编译为IL语言、VB.NET、C#、Delphi.NET、F#和MC++等并可选择.NET框架的相关版本（不同版本有不同的语言特性），目前最新版已经是8.0，7.3版的截图如下：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406030040335.png" alt="enter image description here" /></p>

<p>选定某个dll后，可以在File菜单中选择导出源码：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406030143077.png" alt="enter image description here" /></p>

<p>ILSpy是一个开源且免费的反编译程序，主要功能还是反编译，不支持插件，可以翻译成的语言主要是C#、VB.NET和IL。最新版截图如下：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406030117646.png" alt="enter image description here" /></p>

<p>选中某个dll后，可以在File菜单中导出源码：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406030119351.png" alt="enter image description here" /></p>

<h3>3. 反编译的简单实例</h3>

<p>在这以简单免费的ILSPY做演示。</p>

<p>先来一个找源码中数据库连接信息的例子，示例是用我们上面提到的一个小网站。</p>

<p>先打开ILSpy，拖动相关的dll到左边的边栏中：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406030238300.png" alt="enter image description here" /></p>

<p>点击+号，展开相关的信息：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406030212909.png" alt="enter image description here" /></p>

<p>这里没有做混淆（这是后后后话了），所以反编译出来的类比较容易从名词中看出其作用。
既然要找数据库连接信息，那要先考虑一点，什么时候会进行数据库的连接？很简单！登录的时候吗，所以一般来说，都是先围绕登录点相关的类和函数进行。点击上面的login：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406260910490.png" alt="enter image description here" /></p>

<p>此时右边的分栏可以看到该login类的源码了。里面主要有两个方法：Page_Load和Button1_Click。其中Page_Load是页面加载时一定会调用的方法，Button1_Click是按钮点击事件的方法（简单说就是点击登录按钮时调用的方法）。
点击左边的+号展开两个方法，会发现Page_Load是空的，Button1_Click是包含有源代码的：</p>

<p><img src="http://static.wooyun.org/20140714/2014071411055972343.png" alt="enter image description here" /></p>

<p>所以只能从按钮点击那下手了。</p>

<p><img src="http://static.wooyun.org/20140714/2014071406030230214.png" alt="enter image description here" /></p>

<p>看上图标蓝色的地方，很明显就是数据库连接信息，把数据库连接信息写入到源码中，不是很利于后期的维护。</p>

<p>另外一篇例子，可以参考我发布在zone里的</p>

<p><a href="http://zone.wooyun.org/content/3469">http://zone.wooyun.org/content/3469</a></p>

<p>寻找正方教务系统数据库连接解密方法的一篇文章。</p>

<p>再展示下，如果没混淆和加密的.NET程序，我们可以做到什么。比如下面这个大牛写的程序：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406030299586.png" alt="enter image description here" /></p>

<p>确定就退出了，只要稍加修改马上可以去掉相关的代码，任意用了：</p>

<p><img src="http://static.wooyun.org/20140714/2014071406260936098.png" alt="enter image description here" /></p>

<p>最后就不总结什么了，祝大家0day多多！</p>

<p>浊文一篇为博大家一笑，请勿较真……第一次来提交，写得不好请指正。</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          